package com.itranswarp.learnjava;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.beans.factory.annotation.Value;

// PropertySource("app.properties") 表示从app.properties文件中读取属性值。
// 注意：@PropertySource注解只能标注在@Configuration类上，不能标注在@Component类上。
// 因为@Component类是由Spring容器管理的，而@PropertySource注解是由Spring容器加载的。
// 所以，@PropertySource注解只能标注在@Configuration类上。
// 此外，@PropertySource注解还可以标注在@Configuration类的子类上。
// @PropertySource("application.properties") 默认会在 classpath 根目录下找 application.properties。
// 确保你的 application.properties 文件放在 src/main/resources/ 目录下。
@Configuration
@ComponentScan
@PropertySource("app.properties")
public class AppConfig {

    @Value("${app.name}")
    String name;

    @Value("${app.version}")
    String version;

    @Value("#{appService.appServiceInfo}")
    String appServiceInfo;

    // @Value("${app.logo}")
    // String logo;

    // SuppressWarnings：明确告诉编译器忽略这个资源未关闭的警告。
    @SuppressWarnings("resource")

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        AppService appService = context.getBean(AppService.class);
        appService.printLogo();
        AppConfig appConfig = context.getBean(AppConfig.class);
        System.out.println("appConfig.name: " + appConfig.name);
        System.out.println("appConfig.version: " + appConfig.version);
        System.out.println("appConfig.appServiceInfo: " + appConfig.appServiceInfo);
        System.out.println("appService.logo: " + appService.getLogo());
        System.out.println("appService.logo2: " + appService.logo2);
    }

}
